package com.yuri.news.jpa;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import com.yuri.news.entity.Role;

/**
 * 角色jpa
 * @author Yuri
 */
public interface RoleRepository extends JpaRepository<Role, Long>, JpaSpecificationExecutor<Role> {
	public List<Role> findByRoleName(String roleName);
	/**
	 * 根据用户Id和角色Id添加用户角色
	 * @param userId
	 * @param roleId
	 * @return
	 */
	@Modifying
	@Transactional
	@Query(value = "INSERT INTO t_user_role VALUES(?1,?2)", nativeQuery = true)
	public int updateRoleUser(Long userId, Long roleId);
	/**
	 * 根据用户Id和角色Id删除用户角色
	 * @param userId
	 * @param roleId
	 * @return
	 */
	@Modifying@Transactional
	@Query(value = "delete from t_user_role where user_id = ?1 And role_id = ?2", nativeQuery = true)
	public int deleteRoleUser(Long userId, Long roleId);
	
	/**
	 * 根据角色名模糊查询角色
	 * @param roleName	角色名要加%
	 * @param isAva 	 是否可用
	 * @return
	 */
	List<Role> findByRoleNameLikeAndIsAvailable(String roleName, Boolean isAva);
	
	/**
	 * 根据角色名模糊查询角色（分页）
	 * @param roleName		角色名，要加%
	 * @param isAva			是否可用
	 * @param page			分页信息
	 * @return
	 */
	Page<Role> findByRoleNameLikeAndIsAvailable(String roleName, Boolean isAva, Pageable page);
	/**
	 * 查询所有角色
	 * @param isAve		是否可用
	 * @return
	 */
	List<Role> findByIsAvailable(Boolean isAve);
	
	/**
	 * 查询所有角色（分页）
	 * @param page		分页信息
	 * @param isAve		是否可用
	 * @return
	 */
	Page<Role> findByIsAvailable(Boolean isAve, Pageable page);
}
